/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2021-01-07     ChenYong     first version
 * 2021-12-20     armink       add multi-instance version
 * 2024-06-06     JrHe         添加自定义变量及函数
 */

#ifndef _ULOG_BE_H_
#define _ULOG_BE_H_

#include <ulog.h>

#ifndef ULOG_FILE_PATH_LEN
#define ULOG_FILE_PATH_LEN   (64)
#endif

typedef struct ulog_file_be
{
    struct ulog_backend parent;
    int cur_log_file_cnt;       // 当前日志文件计数
    int cur_log_file_seq;       // 当前日志文件序号
    int cur_log_file_fd;        // 当前日志文件句柄
    rt_size_t file_max_num;     // 最大日志文件个数
    rt_size_t file_max_size;    // 最大日志文件大小
    rt_size_t buf_size;         // 日志缓存大小
    rt_bool_t enable;           // 是否使能文件日志功能

    rt_uint8_t *file_buf;       // 日志缓存
    rt_uint8_t *buf_ptr_now;    // 当前缓存指针

    char *cur_log_file_path;    // 日志文件路径
    char *cur_log_dir_path;     // 日志目录
} ulog_file_be_t, *ulog_file_be_p;

/* ulog file backend api */
int ulog_file_backend_init(ulog_file_be_t *be, const char *name, const char *dir_path, rt_size_t max_num,
        rt_size_t max_size, rt_size_t buf_size);
int ulog_file_backend_deinit(ulog_file_be_t *be);
void ulog_file_backend_enable(ulog_file_be_t *be);
void ulog_file_backend_disable(ulog_file_be_t *be);
/**
* @brief    查找特定字串文件
* @param[IN/OUT]    be          ulog文件句柄
* @param[IN]        dir         目录绝对路径
* @param[IN]        sub_name    子目录名
* @param[IN]        opened      是否打开文件 0:不打开 1:打开
* @return int 0: 成功，其他：失败
*
*/
int ulog_find_file(ulog_file_be_t *be, const char *dir, const char *sub_name, char opened);

/**
* @brief    整理日志文件
* @note 日志文件按时间顺序排列，当日志文件个数超过最大个数时，
*       则删除最早的日志文件；非日志文件直接删除
* @param[IN/OUT]    be          ulog文件句柄
* @return int 0: 成功，其他：失败
*
*/
int ulog_trim_file(ulog_file_be_t *be);


#endif /* _ULOG_BE_H_ */
